#ifndef MOCHA_DETAIL_POINTERS_HPP_INCLUDED
#define MOCHA_DETAIL_POINTERS_HPP_INCLUDED

/**
 * @file 
 */

#include <boost/shared_ptr.hpp>

/**
 * 
 * @param type 
 */
#define MOCHA_PTR_DECL(type) class type ; typedef type * type##_ptr_t; typedef const type * const_##type##_ptr_t
/**
 * 
 * @param type 
 * @param alias 
 * @see MOCHA_PTR_DECL
 */
#define MOCHA_PTR_ALIAS_DECL(type, alias) class type ; typedef type * alias##_ptr_t; typedef const type * const_##alias##_ptr_t
/**
 * 
 * @param type 
 */
#define MOCHA_SHARED_PTR_DECL(type) class type ; typedef boost::shared_ptr< type > type##_ptr_t; typedef boost::shared_ptr<const type > const_##type##_ptr_t; typedef boost::weak_ptr< type > type##_weak_ptr_t; typedef boost::weak_ptr<const type > const_##type##_weak_ptr_t
/**
 * 
 * @param type 
 * @param alias 
 * @see MOCHA_SHARED_PTR_DECL
 */
#define MOCHA_SHARED_PTR_ALIAS_DECL(type, alias) class type ; typedef boost::shared_ptr< type > alias##_ptr_t; typedef boost::shared_ptr<const type > const_##alias##_ptr_t; typedef boost::weak_ptr< type > alias##_weak_ptr_t; typedef boost::weak_ptr<const type > const_##alias##_weak_ptr_t

#endif

